# Maintainer: Felix Yan <felixonmars@archlinux.org>

pkgname=haskell-language-server
pkgver=1.9.1.0
pkgrel=15
pkgdesc="LSP server for GHC"
url="https://github.com/haskell/haskell-language-server#readme"
license=("Apache")
arch=('loong64' 'x86_64')
depends=('ghc-libs' 'haskell-aeson' 'haskell-aeson-pretty' 'haskell-async'
         'haskell-base16-bytestring' 'haskell-cryptohash-sha1' 'haskell-data-default'
         'haskell-extra' 'haskell-ghc' 'haskell-ghc-paths' 'haskell-ghcide' 'haskell-githash'
	 'haskell-gitrev' 'haskell-hashable' 'haskell-hie-bios' 'haskell-hiedb' 
         'haskell-hls-alternate-number-format-plugin' 'haskell-hls-brittany-plugin'
         'haskell-hls-cabal-fmt-plugin' 'haskell-hls-cabal-plugin'
         'haskell-hls-call-hierarchy-plugin' 'haskell-hls-change-type-signature-plugin'
         'haskell-hls-class-plugin' 'haskell-hls-code-range-plugin' 'haskell-hls-eval-plugin'
         'haskell-hls-explicit-fixity-plugin' 'haskell-hls-explicit-imports-plugin'
         'haskell-hls-explicit-record-fields-plugin' 'haskell-hls-floskell-plugin'
         'haskell-hls-fourmolu-plugin' 'haskell-hls-gadt-plugin' 'haskell-hls-ormolu-plugin'
         'haskell-hls-graph' 'haskell-hls-haddock-comments-plugin' 'haskell-hls-hlint-plugin'
         'haskell-hls-module-name-plugin' 'haskell-hls-ormolu-plugin' 'haskell-hls-plugin-api'
         'haskell-hls-pragmas-plugin' 'haskell-hls-qualify-imported-names-plugin'
         'haskell-hls-refactor-plugin' 'haskell-hls-refine-imports-plugin'
         'haskell-hls-rename-plugin' 'haskell-hls-retrie-plugin' 'haskell-hls-splice-plugin'
         'haskell-hls-stylish-haskell-plugin' 'haskell-hls-tactics-plugin' 'haskell-hslogger'
         'haskell-lens' 'haskell-lens-aeson' 'haskell-lsp' 'haskell-lsp-types'
         'haskell-optparse-applicative' 'haskell-optparse-simple' 'haskell-prettyprinter'
         'haskell-regex-tdfa' 'haskell-safe-exceptions' 'haskell-sqlite-simple' 'haskell-temporary'
         'haskell-unliftio-core' 'haskell-unordered-containers')
makedepends=('ghc' 'uusi' 'haskell-ghcide-test-utils' 'haskell-hls-test-utils'
             'haskell-hspec-expectations' 'haskell-lsp-test')
checkdepends=('cabal-install')
source=("https://hackage.haskell.org/packages/archive/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz")
sha512sums=('bbe404fb768c7ce5970cf756a98ea421e44d40c2458795c0e88e245d2ac3927f865c15bf8c77ce4eb520aefc0bb44cd048638ff038326c9631a31c9c3b887db2')

prepare() {
  cd $pkgname-$pkgver
  uusi -u hls-call-hierarchy-plugin $pkgname.cabal
  find test/testdata -name \*.cabal -exec uusi --add-options-all=-dynamic {} \;
}

build() {
  cd $pkgname-$pkgver

  runhaskell Setup configure -O --enable-shared --enable-executable-dynamic --disable-library-vanilla \
    --prefix=/usr --docdir=/usr/share/doc/$pkgname --datasubdir=$pkgname --enable-tests \
    --dynlibdir=/usr/lib --libsubdir=\$compiler/site-local/\$pkgid --ghc-option=-fllvm \
    --ghc-option=-optl-Wl\,-z\,relro\,-z\,now \
    --ghc-option='-pie' \
    -fignore-plugins-ghc-bounds -fcabal -fclass -fcallHierarchy -fhaddockComments -feval -fimportLens \
    -frefineImports -frename -fretrie -ftactic -fhlint -fmoduleName -fpragmas -fsplice \
    -falternateNumberFormat -fqualifyImportedNames -fcodeRange -fchangeTypeSignature \
    -fexplicitFields \
    -ffloskell -ffourmolu -formolu -fstylishHaskell -fbrittany -fstan -fgadt -fexplicitFixity \
    -frefactor -fcabalfmt \
    -fdynamic

  runhaskell Setup build $MAKEFLAGS
  runhaskell Setup register --gen-script
  runhaskell Setup unregister --gen-script
  sed -i -r -e "s|ghc-pkg.*update[^ ]* |&'--force' |" register.sh
  sed -i -r -e "s|ghc-pkg.*unregister[^ ]* |&'--force' |" unregister.sh
}

check() {
  cd $pkgname-$pkgver
  PATH="$PWD/dist/build/haskell-language-server:$PWD/dist/build/haskell-language-server-wrapper:$PATH" \
  LD_LIBRARY_PATH="$PWD/dist/build" \
  runhaskell Setup test || echo "Tests failed"
}

package() {
  cd $pkgname-$pkgver

  install -D -m744 register.sh "$pkgdir"/usr/share/haskell/register/$pkgname.sh
  install -D -m744 unregister.sh "$pkgdir"/usr/share/haskell/unregister/$pkgname.sh
  runhaskell Setup copy --destdir="$pkgdir"
  install -D -m644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/
  rm -f "$pkgdir"/usr/share/doc/$pkgname/LICENSE
}
